﻿/* ***** BEGIN LICENSE BLOCK *****
 *
 * The contents of this file are subject to the Mozilla Public License Version 1.1
 * (the "License"); you may not use this file except in compliance with the
 * License. You may obtain a copy of the License at http://www.mozilla.org/MPL/
 *
 * Software distributed under the License is distributed on an "AS IS" basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
 * the specific language governing rights and limitations under the License.
 * 
 * The Original Code is CnCNet Client code, Released 2nd January 2009.
 * 
 * The Initial Developers of the Original Code are
 * Adam Krock and John Sanderson. Portions created by
 * the Initial Developer are Copyright (C) 2010
 * the Initial Developer. All Rights Reserved.
 *
 * Contributor(s): Adam Krock, John Sanderson.
 *
 * Alternatively, the contents of this file may be used under the terms of
 * either of the GNU General Public License Version 2 or later (the "GPL"),
 * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
 * in which case the provisions of the GPL or the LGPL are applicable instead
 * of those above. If you wish to allow use of your version of this file only
 * under the terms of either the GPL or the LGPL, and not to allow others to
 * use your version of this file under the terms of the MPL, indicate your
 * decision by deleting the provisions above and replace them with the notice
 * and other provisions required by the GPL or the LGPL. If you do not delete
 * the provisions above, a recipient may use your version of this file under
 * the terms of any one of the MPL, the GPL or the LGPL.
 * 
 * ***** END LICENSE BLOCK *****/

using System;
using System.Collections;
using System.Windows.Forms;
using System.Threading;


namespace CnCNet
{
    public class cncNetServerList : ArrayList
    {
        public static Thread myServerBouncer;

        public cncNetServerList()
        {
            myServerBouncer = new Thread(new ThreadStart(run));
            myServerBouncer.Start();
        }

        public void run()
        {
            try
            {
                // Bouncer thread
                while (true)
                {
                    foreach (cncNetServer a in ToArray())
                    {
                        if (a.myKeepAliveCurrent < 0)
                        {
                            Remove(a);
                        }
                    }
                    Thread.Sleep(1000);
                }
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
            }
        }

        public bool addServer(string serverName)
        {
            try
            {
                foreach (cncNetServer a in ToArray())
                {
                    if (a.myName.Equals(serverName))
                    {
                        return false;
                    }
                }
                cncNetServer tempOne = new cncNetServer(serverName);
                tempOne.start();
                Add(tempOne);
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }

        public void removeServer(string serverName)
        {
            try
            {
                foreach (cncNetServer a in ToArray())
                {
                    if (a.myName.Equals(serverName))
                    {
                        a.stop();
                        Remove(a);
                    }
                }
            }
            catch (Exception)
            {

            }
        }

        public cncNetServer getServer(string serverName)
        {
            foreach(cncNetServer a in ToArray())
            {
                if(a.myName.Equals(serverName))
                {
                    return a;
                }
            }
            return null;
        }

        public bool serverExists(string serverName)
        {
            foreach (cncNetServer a in ToArray())
            {
                if (a.myName.Equals(serverName))
                {
                    return true;
                }
            }
            return false;
        }    
    }  
}
